import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'

const request = axios.create({
  baseURL: '/api',
  timeout: 60000,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
})

// 请求拦截器：检查 Token
request.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  
  // 如果没有 Token，且当前不是登录页或白名单路由，则跳转到登录页
  if (!token && !isWhitelistRoute(config.url)) {
    router.push('/')
    return Promise.reject(new Error('未登录，请先登录'))
  }

  // 有 Token 则携带
  if (token) {
    config.headers['satoken'] = `${token}` // 注意和 Sa-Token 后端配置一致
  }
  
  return config
}, error => {
  return Promise.reject(error)
})

// 响应拦截器：处理 Token 过期/无效
request.interceptors.response.use(response => {
  if (response.data.code === 401 || response.data.code === 901) {
    handleTokenInvalid() // 统一处理 Token 失效
    return Promise.reject(response.data)
  }
  return response.data
}, error => {
  ElMessage.error(error.response?.data?.message || '请求失败')
  return Promise.reject(error)
})

// 检查是否在白名单（如登录、注册等无需 Token 的接口）
function isWhitelistRoute(url) {
  const whitelist = ['/user/login', '/user/register'] // 根据实际需求调整
  return whitelist.some(path => url.includes(path))
}

// 统一处理 Token 失效
function handleTokenInvalid() {
  localStorage.removeItem('token')
  ElMessage.error('登录已过期，请重新登录')
  router.push('/')
}

export default request